View Javadoc

1   package uba.db.client.model;
2   
3   import java.io.File;
4   import java.io.FileWriter;
5   import java.io.IOException;
6   import java.io.Reader;
7   import java.io.StringReader;
8   import java.io.Writer;
9   
10  import javax.swing.JFileChooser;
11  
12  import uba.db.client.structure.ClientDataConverter;
13  import uba.db.client.ui.ClientWindow;
14  
15  /***
16   * Administrador del comportamiento del cliente.
17   * 
18   * @version $Revision 1.0$
19   */
20  public class ClientManager {
21  
22  	private ClientWindow window;
23  
24  	private ConnectionToServer connection;
25  
26  	private boolean running;
27  
28  	private ClientDataConverter converter;
29  
30  	/***
31  	 * Constructor default.
32  	 *  
33  	 */
34  	public ClientManager() {
35  		super();
36  		initialize();
37  	}
38  
39  	/***
40  	 * Inicialización privada.
41  	 *  
42  	 */
43  	void initialize() {
44  		connection = new ConnectionToServer();
45  		converter = new ClientDataConverter();
46  		running = false;
47  	}
48  
49  	/***
50  	 * Muestra la ventana cliente.
51  	 */
52  	public void showWindow() {
53  		if (window == null) {
54  			window = new ClientWindow(this);
55  		}
56  
57  		window.setVisible(true);
58  	}
59  
60  	/***
61  	 * Cierra la ventana cliente TODO buscar una mejor opcion
62  	 */
63  	public void close() {
64  		if (window != null) {
65  			window.setVisible(false);
66  		}
67  		running = false;
68  	}
69  
70  	/***
71  	 * Intenta grabar los datos en el archivo, o muestra una ventana de error si
72  	 * no puede
73  	 * 
74  	 * @param s
75  	 *            el stream con los datos a grabar
76  	 * @param p
77  	 *            el path absoluto del archivo
78  	 */
79  	public void write(Writer w) throws IOException {
80  		Reader r = new StringReader(window.result());
81  		int c;
82  		while ((c = r.read()) != -1) {
83  			w.write(c);
84  		}
85  		w.close();
86  	}
87  
88  	/***
89  	 * Pregunta al usuario por una ubicación y nombre de archivo para guardar la
90  	 * tabla actual de resultados.
91  	 *  
92  	 */
93  	public void export() {
94  		JFileChooser saveFile = new JFileChooser("");
95  		int result = saveFile.showSaveDialog(window);
96  		try {
97  			File filePath = saveFile.getCurrentDirectory();
98  			String fileName = saveFile.getName(saveFile.getSelectedFile());
99  			FileWriter writer = new FileWriter(filePath + "/" + fileName);
100 			write(writer);
101 		} catch (IOException ie) {
102 			System.err.println("Error al intentar grabar el archivo");
103 		}
104 	}
105 
106 	/***
107 	 * Ejecuta la consulta, devuelve un error y un result set nulo si hay algún
108 	 * problema
109 	 * 
110 	 * @param s
111 	 *            la consulta
112 	 * @return el resultado o un null result set
113 	 */
114 
115 	public void execute(String s) {
116 		String executionResult;
117 		ResultSet dataResult;
118 		try {
119 			executionResult = connection.execute(s);
120 			dataResult = converter.convertToResultSet(executionResult);
121 			window.setResult(dataResult.getTuples());
122 			window.setQueryPlan(dataResult.getQueryPlan());
123 		} catch (Exception ex) {
124 			window.notifyError("Error al ejecutar la consulta.");
125 		}
126 	}
127 
128 	/***
129 	 * Inicia la conexión entre el cliente y el servidor.
130 	 * 
131 	 * @throws IOException
132 	 *             Error de socket.
133 	 */
134 	public void connect() throws IOException {
135 		connection.connect(this);
136 		running = true;
137 		showWindow();
138 		while (running) {
139 		}
140 	}
141 }